﻿Imports Logica
''' <summary>
''' Modifica un departamento
''' </summary>
''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
Public Class ModificarDepartamento

    Private m_codigoDep As String
    Private m_cedulaDir As String

    ''' <summary>
    ''' Encargado de inicializar el objeto
    ''' </summary>
    ''' <param name="p_codigo">Código del departamento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Public Sub New(ByVal p_codigo As String)
        InitializeComponent()
        m_codigoDep = p_codigo

    End Sub

    ''' <summary>
    ''' Se ejecuta al iniciar el objeto
    ''' </summary>
    ''' <param name="sender">El objeto que lo envía</param>
    ''' <param name="e">Argumentos del evento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub ModificarDepartamento_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim dgvc As DataGridViewCell
        Dim filas As Integer
        Dim cedula As String
        Dim i As Integer

        btnLimpiar_Click(sender, e)
        txtCodigo.Text = m_codigoDep
        buscarDepartamento()
        cargarDirectores()
        txtNombre.Focus()

        filas = dgvDirectores.Rows.Count

        For i = 0 To filas - 1
            dgvc = dgvDirectores.Item(0, i)
            cedula = dgvc.Value

            If String.Equals(cedula, m_cedulaDir) Then
                dgvDirectores.Rows(i).Selected = True
                dgvDirectores.FirstDisplayedScrollingRowIndex = i
            End If

        Next


    End Sub
    ''' <summary>
    ''' Se utiliza para limpiar los campos de texto
    ''' </summary>
    ''' <param name="sender">El objeto que lo envía</param>
    ''' <param name="e">Argumentos del evento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click

        txtNombre.Text = ""
        txtDescripcion.Text = ""
        lblError.Text = ""

    End Sub
    ''' <summary>
    ''' Busca el departamento para cargar los datos
    ''' </summary>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub buscarDepartamento()
        Dim datosDep As List(Of Hashtable)

        datosDep = Gestor.departamentoBuscar(m_codigoDep, "")

        Try

            For Each dep As Hashtable In datosDep

                txtNombre.Text = dep("nombre")
                txtDescripcion.Text = dep("descripcion")
                m_cedulaDir = dep("director")

            Next

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

    End Sub
    ''' <summary>
    ''' Carga los directores(jefes) disponibles.
    ''' </summary>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub cargarDirectores()

        Dim listaDirectores As List(Of Hashtable)

        Try

            listaDirectores = Gestor.usuarioBuscarDirectores()

            If listaDirectores.Count <> 0 Then

                For Each dir As Hashtable In listaDirectores
                    dgvDirectores.Rows.Add(dir("identificacion"), dir("nombre"), dir("primerApellido"), dir("segundoApellido"), dir("puesto"))
                Next

            Else
                lblError.ForeColor = Color.Red
                lblError.Text = "No se encontraron directores."
            End If


        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

    End Sub
    ''' <summary>
    ''' Boton que permite modificar el departamento
    ''' </summary>
    ''' <param name="sender">El objeto que lo envía</param>
    ''' <param name="e">Argumentos del evento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click

        Dim codigo As String
        Dim nombre As String
        Dim descripcion As String
        Dim codigoDirec As String

        ' Validar los controles de texto.
        For Each control As Control In gbModificarDep.Controls
            If TypeOf control Is TextBox Then
                If control.Text = "" Or control.Text.Trim = "" Then
                    control.Focus()
                    lblError.ForeColor = Color.Red
                    lblError.Text = "El campo '" & control.Tag & "' está vacío."
                    Exit Sub
                End If
            End If
        Next

        Try

            codigo = txtCodigo.Text
            nombre = txtNombre.Text
            descripcion = txtDescripcion.Text

            codigoDirec = dgvDirectores.SelectedRows(0).Cells(0).Value

            Gestor.departamentoModificar(codigo, nombre, descripcion, codigoDirec)

            txtCodigo.Text = ""
            txtNombre.Text = ""
            txtDescripcion.Text = ""
            dgvDirectores.Rows.Clear()

            lblError.ForeColor = Color.Green
            lblError.Text = "Departamento modificado exitosamente."

        Catch es As SqlClient.SqlException When es.Number.Equals(4060)

            MessageBox.Show("Error de conexión con la base de datos.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Catch ex As Exception

            MessageBox.Show("Error en: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try


    End Sub
    ''' <summary>
    ''' Si el texto cambia en el textbox se limpia el label de error
    ''' </summary>
    ''' <param name="sender">El objeto que lo envía</param>
    ''' <param name="e">Argumentos del evento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub txtDescripcion_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtDescripcion.TextChanged
        lblError.Text = ""
    End Sub
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="sender">El objeto que lo envía</param>
    ''' <param name="e">Argumentos del evento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub txtNombre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNombre.TextChanged
        lblError.Text = ""
    End Sub
    ''' <summary>
    ''' Si se cancela la operación se esconde la pantalla
    ''' </summary>
    ''' <param name="sender">El objeto que lo envía</param>
    ''' <param name="e">Argumentos del evento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Me.Visible = False
    End Sub

    ''' <summary>
    ''' Si se inserta un numero en el textbox da mensaje de error
    ''' </summary>
    ''' <param name="sender">El objeto que lo envía</param>
    ''' <param name="e">Argumentos del evento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub txtNombre_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNombre.KeyPress

        If Char.IsLetter(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            lblError.ForeColor = Color.Red
            lblError.Text = "El sistema no permite números en el nombre del departamento."
            e.Handled = True
        End If

    End Sub
    ''' <summary>
    ''' Si se inserta un numero en el textbox da mensaje de error
    ''' </summary>
    ''' <param name="sender">El objeto que lo envía</param>
    ''' <param name="e">Argumentos del evento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Sub txtDescripcion_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDescripcion.KeyPress

        If Char.IsLetter(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            lblError.ForeColor = Color.Red
            lblError.Text = "El sistema no permite números en la descripción del departamento."
            e.Handled = True
        End If

    End Sub
End Class
